/* Es la Clase LeerPalabraPorPalabra buscamos los registros que existen dentro de la FDs y a su vez controlamos que lo que nos estan *
 * pasando es una FDs y no un TXT norma, ya que debe cumplir con los registros para poder armar la tabla de componentes. 			 *
 * ----------------------------------------------------------------------------------------------------------------------------------*
 * variables utilizadas:																											 *
 * FDOk: variable que indica que en el TXT es una FDs																				 *
 * RegistroPrincipal: Variable que indica que estoy leyendo el registro principal													 *
 * SegundoNivel: Variable que indica que estoy leyendo registros del nivel por debajo del principal									 *
 * NombreRegistroPrincipal: es donde se encuentra el nombre del registro principal de la FD											 *
 * NombreRegistroNivel2: Nombre de los campos de segundo Nivel																		 *
 * CortarLectura: Quiebra la lectua para continuar por la siguiente palabra															 *
 * registroMayor: indica el Nivel Principar de los registros.																		 *
 * stri, strAux, st: variables donde se almacenan los strings de entrada															 *
 * MatrizDeDatos: es donde se encuentra todos nuestros datos a mostrar (arreglo multidimencional)									 *
 * ----------------------------------------------------------------------------------------------------------------------------------*/

package jfds.clases;

import java.util.ArrayList;
import java.util.StringTokenizer;

public class LeerPalabraPorPalabra {
	private static boolean FDOk, RegistroPrincipal, SuboUnNivel, BajoUnNivel, MismoNivel, variablePIC = false;
	static boolean CortarLectura;
    static int registroMayor, intAux = 0;
    static String stri, NombreRegistroPrincipal, NombreRegistroNivel2;
    static ArrayList<String>  Principal = new ArrayList<String>(), Columnas = new ArrayList<String>();
    
    
	public final static void Leo (String str){
		CortarLectura = false;
		StringTokenizer st = new StringTokenizer (str);
        // bucle por todas las palabras
        while (st.hasMoreTokens() && CortarLectura != true){
            stri = st.nextToken();
            if (stri.startsWith("*")){
            	CortarLectura = true;
            }else {
            	if (stri.equals("FILLER")){
            		CortarLectura = true;
            	}
            	if (stri.equals("FD")){
            		CortarLectura = true;
            		FDOk = true;
            	}   
            	if (stri.equals("PIC")){
            		variablePIC = true;
            		SuboUnNivel = false;
					BajoUnNivel = false;
					MismoNivel = false;
            	}
            	if (FDOk == true){
            		if(Numerar.IsNumber(stri)){
						if (variablePIC != true){
							if (stri.equals("88")){
								CortarLectura = true;
							}
							if (registroMayor == 0){
	            			   registroMayor = intAux= Integer.parseInt(stri);
	            			   RegistroPrincipal = true;
	            			}else{
	            			  int Numash = Integer.parseInt(stri);
	            			  if(registroMayor < Numash){
	            				  if (intAux < Numash){
	            					  SuboUnNivel = true;
	            					  BajoUnNivel = false;
	            					  MismoNivel = false;
	            				  }
	            				  if (intAux > Numash){
	            					  SuboUnNivel = false;
	            					  BajoUnNivel = true;
	            					  MismoNivel = false;
	            				  }
	            				  if (intAux == Numash){
	            					  SuboUnNivel = false;
	            					  BajoUnNivel = false;
	            					  MismoNivel = true;
	            				  }else{
	            					  intAux = Integer.parseInt(stri);
	            				  }
	            			  }else{
	            				  if(registroMayor == Numash){
	            				    RegistroPrincipal = true;
	            				    Columnas.add("*");
	            				  }
	            			  }
	            			}
						}
            		}else{
            			if (RegistroPrincipal == true){
            				Principal.add("+");
            				Principal.add(stri);
            				RegistroPrincipal = false;
            				
            			}
            			if(SuboUnNivel == true || BajoUnNivel == true || MismoNivel == true){
            				NombreRegistroNivel2 = stri;
            			}
            			if (variablePIC == true){
            				Columnas.add(NombreRegistroNivel2);
            				stri = st.nextToken();
            				int i = 0, num = 0;
            				String cadena = null;
            				while(stri.charAt(i)!=')'){
            					if (stri.charAt(i)== '('){
            						i++; 
            						for (; stri.charAt(i)!=')'; i++){
            						   cadena = "" + stri.charAt(i);
            						}
            					}else{
            						i++;
            					}
            				}
            				num = Integer.parseInt (cadena);
            				variablePIC = false;
            			}
            		}
            	}
            }  	
        }
	}
	public final static ArrayList<String> recuperoPrincipal(ArrayList<String> l1) {
		l1 = Principal;
		return l1;
	}
	
	public final static ArrayList<String> recuperoColumnas(ArrayList<String> l1) {
		l1 = Columnas;
		return l1;
	}
}
